[Arduino] PWM–LED

int led = 9;
void setup()
{
    pinMode(led,OUTPUT);
}
int light = 0,add = 5;
void loop()
{ 
    light+=add;
    delay(30);
    analogWrite(led,light);
    if(light == 255||light == 0)
    {
        add = -add;
        //delay(500);
    } 
}

[Arduino] ActiveBuzzer

int buzzer = 8;
void setup() { //初始化蜂鳴器pin8為輸出
    pinMode(buzzer,OUTPUT);
}

void loop() {
    for(int i = 1;i <= 80;i++) //每隔2ms鳴叫一次重複80次
    {
        digitalWrite(buzzer,HIGH);
        delay(1); 
        digitalWrite(buzzer,LOW);
        delay(1);
    }
    for(int i = 1;i <= 100;i++) //每隔4ms鳴叫一次重複100次
    {
        digitalWrite(buzzer,HIGH);
        delay(2);
        digitalWrite(buzzer,LOW);
        delay(2);
    }
}

[Arduino] 6*LED

int led[7] = {0,1,2,3,4,5,6}; //set pin number
void setup() //set pin led[1]~led[6] as OUTPUT
{
    for(int i = 1;i <= 6;i++)
        pinMode(led[i], OUTPUT);
}
void s1()
{
    for(int i = 1;i <= 6;i++) //由1~6每200毫秒點亮一顆LED
    {
        digitalWrite(led[i], HIGH); 
        delay(200);
    }
    for(int i = 6;i >= 1;i--) //由6~1每200毫秒熄滅一顆LED
     { 
        digitalWrite(led[i], LOW); 
        delay(200); 
    }
}
void s2()
{
   for(int i = 3;i >= 1;i--) //由中間往外每200毫秒點亮一組LED
    {
        digitalWrite(led[i], HIGH);
        digitalWrite(led[7-i], HIGH);
        delay(200);
    }
    for(int i = 1;i <= 3;i++) //由外往內每200毫秒熄滅一組LED
    {
        digitalWrite(led[i], LOW);
        digitalWrite(led[7-i], LOW);
        delay(200);
    }
}
void s3()
{
    for(int i = 1;i <= 3;i++) //由外往內 間隔200毫秒閃爍一組LED
    {
        digitalWrite(led[i], HIGH);
        digitalWrite(led[7-i], HIGH);
        delay(200);
        digitalWrite(led[i], LOW);
        digitalWrite(led[7-i], LOW);
        delay(200);
    }
    for(int i = 2;i >= 1;i--) //由內往外 間隔200毫秒閃爍一組LED
    {
        digitalWrite(led[i], HIGH);
        digitalWrite(led[7-i], HIGH);
        delay(200);
        digitalWrite(led[i], LOW);
        digitalWrite(led[7-i], LOW);
        delay(200);
    }
}
void flash()
{
    for(int j = 1;j <= 2;j++) //執行兩次閃爍
    {
        for(int i = 1;i <= 6;i++) // 1~6全亮
        {
            digitalWrite(led[i],HIGH);
        }
        delay(200);
        for(int i = 1;i <= 6;i++) //1~6全暗
        {
            digitalWrite(led[i],LOW);
        }
        delay(200);
    }
}
void loop() {
    s1();
    flash();
    s2();
    flash();
    s3();
    flash();
}

[Arduino] PassiveBuzzer

int buzzer = 8;
int i = 0,aclick = 100;
int music[500] = {6,0,10,0,9,10,0,7,0,8,0,10,9,8,7,6,0,6,10,0,9,
10,0,7,0,8,0,10,5,0,5,0,6,0,10,0,9,10,0,7,0,8,0,10,9,8,7,6,0,6,10,
0,9,10,0,7,0,8,0,10,5,0,5,0,6,0,8,0,7,8,7,0,9,0,8,0,7,8,7,5,6,0,10,
0,9,10,9,10,11,0,10,0,9,0,10,0,6,0,8,0,7,8,7,0,9,0,8,0,7,8,7,5,6,0,
10,0,9,10,9,10,12,0,10,0,9,0,10,0,6,0,8,0,7,8,7,0,9,0,8,0,7,8,7,5,6,
0,10,0,9,10,9,10,11,0,10,0,9,0,10,0,9,0,0,0,0,9,9,10,0,9,0,8,0,7,0,6,
0,0,0,0,0,-1};
int scale[50] = {0,131,147,165,175,196,220,247,262,294,330,392,440,494};

void setup() {
    pinMode(buzzer,OUTPUT);
}
void loop() {
    if(music[i] == -1)i = 0;
    mtone(scale[music[i]]);
    i++;
}
void mtone(int f) {
    tone(buzzer,f);
    delay(aclick);
    noTone(buzzer);
}

[C++] add_node

#include<iostream>
#include<cstdlib>
#include<string>
using namespace std;
class node
{
    public:
    int num;
    node *next;
    node()
    {
        num=0;
        next=NULL;
    } 
};
node *add_node(node *mylist,int data)
{
    node *temp_node=mylist;
    if(mylist==NULL)
    {
        mylist=new node;
        mylist->num=data;
        return mylist;
    }
    while(temp_node->next!=NULL)
    {
        temp_node=temp_node->next;
    }
    temp_node->next=new node;
    temp_node->next->num=data;
    return mylist;
}
void show(node *mylist)
{
    while(mylist!=NULL)
    {
        cout<<mylist->num<<"\n";
        mylist=mylist->next;
    }
    return;
}
int main()
{
    node *list=NULL;
    for(int i=0;i<5;i++)
    {
        list=add_node(list,i);
    }
    show(list);
    system("pause");
    return 0;
}

[C++] Operator overloading Part2

#include<iostream>
#include<cstring>
#define MAX_STRING 100
using namespace std;
class myString
{
    friend istream& operator >> (istream&, myString&);
    friend ostream& operator << (ostream&, myString&);
    private:
        char content[MAX_STRING];
    public:
        char operator [] (int);
        myString operator += (myString);
};
istream &operator >> (istream &in, myString &temps)
{
    in >> temps.content;
    return in;
}
ostream &operator << (ostream &out, myString &temps)
{
    out << temps.content;
    return out;
}
char myString::operator [] (int n)
{
    return content[n];
}
myString myString::operator += (myString s)
{
    strcat_s(content, s.content);
    return *this;
}
int main()
{
    myString s1,s2;
    cin >> s1 >> s2;
    cout << s1[0]<<endl;
    cout << (s1 += s2) << endl;
    system("pause"); 
    return 0;
}

[C++] Operator Overloading

#include<iostream>
#include<cstdlib>

using namespace std;
class rec
{
    private:
    int width,length,area;
    public:
    rec(int w=1,int l=1)
    {
        width=w;
        length=l;
        area=w*l;
    }
    bool operator > (rec temp_rec)
    {
        if(area>temp_rec.area)
        {
            return true;
        }
        return false;
    }
    bool operator == (rec temp_rec)
    {
        if(area==temp_rec.area)return true;
        return false;
    }
};
int main()
{
    rec a(5,10),b(10,6);
    if(a>b)
    {
        cout<<"a>b\n";
    }
    else if(a==b)
    {
        cout<<"a=b\n";
    }
    else
    {
        cout<<"a<b\n";
    }
    system("pause");
    return 0;
}

[C++] Permutation

  • Rotate example: [ 1 2 3 4]-> 4 1 2 3 (right shift)
  • Permutation of 1 2 3 4: [] = rotate, () = recursion
    • [1] => 1 (2 3 4)
    • [1 2] => 2 (1 3 4)
    • [1 2 3] => 3 (1 2 4)
    • [1 2 3 4] => 4 (1 2 3)

  • Code
#include<iostream>
#include<vector>
using namespace std;

int count = 0;

void rotate(vector<int> &list, int x, int y) {
    int tmp = list[y];
    for (int i = y; i > x; i--) {
        list[i] = list[i-1];
    }
    list[x] = tmp;
}

void perm(int a, int n, vector<int> list){
    if (a < n){
        for (int i = a; i < n; i++) {
            vector<int> tmplist(list);
            rotate(tmplist, a, i);
            perm(a+1, n, tmplist);
        }
    }
    else{
        for (int i = 0; i < n; i++) {
            cout<<list[i]<<" ";
        }
        cout<<endl;
        count++;
    }
}

int main()
{
    int n;
    vector<int> list;
    cin>>n;
    list.resize(n);
    for (int i = 0;i < n; i++) {
        cin>>list[i];
    }
    perm(0, n, list);
    cout<<"count="<<count<<endl;
    return 0;
}

[C++] Polymorphism

/*(base)A->B->C->D(derived)
 B* b=new C;
 A* a=b; //OK

 A* a=new D;
 A* a=new B; //next line will return NULL
 C* c=dynamic_cast<C*>(a); //OK
*/
#include<iostream>

using namespace std;
class instrument
{
    public:
    virtual void play()=0;
};
class guitar:public instrument
{
    public:
    void play()
    {
        cout<<"Guitar played.\n";
    }
};
class piano:public instrument
{
    public:
    void play()
    {
     cout<<"Piano played.\n";
    }
};
int main()
{
    instrument *s=new guitar;
    //Guitar played
    s->play();
    delete s;
    //Piano played
    s=new piano;
    s->play();
    delete s;
    return 0;
}